// 引入axios库，用于发送HTTP请求
import axios from 'axios'
// 引入Element UI的消息组件，用于显示提示信息
import { Message } from 'element-ui'
// 根据环境变量设置基础URL，开发环境使用空字符串，生产环境使用指定的API主机地址
const baseURL = process.env.VUE_APP_MODE == 'dev' ? '' :
process.env.VUE_APP_API;
// 创建一个axios实例，设置基础URL和请求超时时间（5秒）
const service = axios.create({
baseURL: baseURL,
timeout: 5000 // 设置为5秒，单位是毫秒
})
// 请求拦截器，在请求发送之前执行
service.interceptors.request.use(
config => {
// 从本地存储中获取token
let token = localStorage.getItem("token");
if (token) {
// 如果请求配置没有headers属性，则初始化它
if (!config.headers) {
config.headers = {};
}
// 在请求头中添加Authorization、token和systoken字段，值为token
config.headers.Authorization = token
config.headers.token = token;
config.headers.systoken = token;
}
// 设置请求头的Accept-Language为中文
config.headers['Accept-Language'] = 'zh-CN';
return config; // 返回配置好的请求
},
error => {
// 处理请求错误，显示错误消息
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error); // 拒绝请求，返回错误
}
)
// 响应拦截器，在服务器响应之后执行
service.interceptors.response.use(
response => {
// 获取响应数据
const res = response.data;
// 如果服务器返回未登录信息，3秒后跳转到登录页面
if (res.message == '用户未登录') {
setTimeout(() => {
window.open('/login', '_self')
}, 3000);
}
// 如果服务器返回未授权信息，显示提示消息并3秒后跳转到登录页面
if (res.code == -401) {
Message({
message: "未登录",
type: 'error',
duration: 3 * 1000
});
setTimeout(() => {
window.open('/login', '_self')
}, 3000);
}
// 如果响应状态码不是200，显示错误消息并返回响应数据
if (res.code !== 200) {
    Message({
    message: res.message || 'Error',
    type: 'error',
    duration: 3 * 1000
    });
    return res; // 返回响应数据
    } else {
    // 响应状态码是200，返回实际数据部分
    return res;
    }
    },
    error => {
    // 处理响应错误，显示错误消息
    Message({
    message: error.message,
    type: 'error',
    duration: 5 * 1000
    });
    return Promise.reject(error); // 拒绝请求，返回错误
    }
    )
    // 导出axios实例，用于在其他模块中发送请求
    export default service;